(0) Obligation:

Q restricted rewrite system:
The TRS R consists of the following rules:

app(app(app(if, true), xs), ys) → xs
app(app(app(if, false), xs), ys) → ys
app(app(lt, app(s, x)), app(s, y)) → app(app(lt, x), y)
app(app(lt, 0), app(s, y)) → true
app(app(lt, y), 0) → false
app(app(eq, x), x) → true
app(app(eq, app(s, x)), 0) → false
app(app(eq, 0), app(s, x)) → false
app(app(merge, xs), nil) → xs
app(app(merge, nil), ys) → ys
app(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → app(app(app(if, app(app(lt, x), y)), app(app(cons, x), app(app(merge, xs), app(app(cons, y), ys)))), app(app(app(if, app(app(eq, x), y)), app(app(cons, x), app(app(merge, xs), ys))), app(app(cons, y), app(app(merge, app(app(cons, x), xs)), ys))))
app(app(map, f), nil) → nil
app(app(map, f), app(app(cons, x), xs)) → app(app(cons, app(f, x)), app(app(map, f), xs))
app(app(mult, 0), x) → 0
app(app(mult, app(s, x)), y) → app(app(plus, y), app(app(mult, x), y))
app(app(plus, 0), x) → 0
app(app(plus, app(s, x)), y) → app(s, app(app(plus, x), y))
list1 → app(app(map, app(mult, app(s, app(s, 0)))), hamming)
list2 → app(app(map, app(mult, app(s, app(s, app(s, 0))))), hamming)
list3 → app(app(map, app(mult, app(s, app(s, app(s, app(s, app(s, 0))))))), hamming)
hamming → app(app(cons, app(s, 0)), app(app(merge, list1), app(app(merge, list2), list3)))

Q is empty.

(1) Overlay + Local Confluence (EQUIVALENT transformation)

The TRS is overlay and locally confluent. By [NOC] we can switch to innermost.

(2) Obligation:

Q restricted rewrite system:
The TRS R consists of the following rules:

app(app(app(if, true), xs), ys) → xs
app(app(app(if, false), xs), ys) → ys
app(app(lt, app(s, x)), app(s, y)) → app(app(lt, x), y)
app(app(lt, 0), app(s, y)) → true
app(app(lt, y), 0) → false
app(app(eq, x), x) → true
app(app(eq, app(s, x)), 0) → false
app(app(eq, 0), app(s, x)) → false
app(app(merge, xs), nil) → xs
app(app(merge, nil), ys) → ys
app(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → app(app(app(if, app(app(lt, x), y)), app(app(cons, x), app(app(merge, xs), app(app(cons, y), ys)))), app(app(app(if, app(app(eq, x), y)), app(app(cons, x), app(app(merge, xs), ys))), app(app(cons, y), app(app(merge, app(app(cons, x), xs)), ys))))
app(app(map, f), nil) → nil
app(app(map, f), app(app(cons, x), xs)) → app(app(cons, app(f, x)), app(app(map, f), xs))
app(app(mult, 0), x) → 0
app(app(mult, app(s, x)), y) → app(app(plus, y), app(app(mult, x), y))
app(app(plus, 0), x) → 0
app(app(plus, app(s, x)), y) → app(s, app(app(plus, x), y))
list1 → app(app(map, app(mult, app(s, app(s, 0)))), hamming)
list2 → app(app(map, app(mult, app(s, app(s, app(s, 0))))), hamming)
list3 → app(app(map, app(mult, app(s, app(s, app(s, app(s, app(s, 0))))))), hamming)
hamming → app(app(cons, app(s, 0)), app(app(merge, list1), app(app(merge, list2), list3)))

The set Q consists of the following terms:

app(app(app(if, true), x0), x1)
app(app(app(if, false), x0), x1)
app(app(lt, app(s, x0)), app(s, x1))
app(app(lt, 0), app(s, x0))
app(app(lt, x0), 0)
app(app(eq, x0), x0)
app(app(eq, app(s, x0)), 0)
app(app(eq, 0), app(s, x0))
app(app(merge, x0), nil)
app(app(merge, nil), x0)
app(app(merge, app(app(cons, x0), x1)), app(app(cons, x2), x3))
app(app(map, x0), nil)
app(app(map, x0), app(app(cons, x1), x2))
app(app(mult, 0), x0)
app(app(mult, app(s, x0)), x1)
app(app(plus, 0), x0)
app(app(plus, app(s, x0)), x1)
list1
list2
list3
hamming

(3) DependencyPairsProof (EQUIVALENT transformation)

Using Dependency Pairs [AG00,LPAR04] we result in the following initial DP problem.

(4) Obligation:

Q DP problem:
The TRS P consists of the following rules:

APP(app(lt, app(s, x)), app(s, y)) → APP(app(lt, x), y)
APP(app(lt, app(s, x)), app(s, y)) → APP(lt, x)
APP(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → APP(app(app(if, app(app(lt, x), y)), app(app(cons, x), app(app(merge, xs), app(app(cons, y), ys)))), app(app(app(if, app(app(eq, x), y)), app(app(cons, x), app(app(merge, xs), ys))), app(app(cons, y), app(app(merge, app(app(cons, x), xs)), ys))))
APP(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → APP(app(if, app(app(lt, x), y)), app(app(cons, x), app(app(merge, xs), app(app(cons, y), ys))))
APP(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → APP(if, app(app(lt, x), y))
APP(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → APP(app(lt, x), y)
APP(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → APP(lt, x)
APP(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → APP(app(cons, x), app(app(merge, xs), app(app(cons, y), ys)))
APP(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → APP(app(merge, xs), app(app(cons, y), ys))
APP(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → APP(merge, xs)
APP(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → APP(app(app(if, app(app(eq, x), y)), app(app(cons, x), app(app(merge, xs), ys))), app(app(cons, y), app(app(merge, app(app(cons, x), xs)), ys)))
APP(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → APP(app(if, app(app(eq, x), y)), app(app(cons, x), app(app(merge, xs), ys)))
APP(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → APP(if, app(app(eq, x), y))
APP(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → APP(app(eq, x), y)
APP(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → APP(eq, x)
APP(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → APP(app(cons, x), app(app(merge, xs), ys))
APP(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → APP(app(merge, xs), ys)
APP(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → APP(app(cons, y), app(app(merge, app(app(cons, x), xs)), ys))
APP(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → APP(app(merge, app(app(cons, x), xs)), ys)
APP(app(map, f), app(app(cons, x), xs)) → APP(app(cons, app(f, x)), app(app(map, f), xs))
APP(app(map, f), app(app(cons, x), xs)) → APP(cons, app(f, x))
APP(app(map, f), app(app(cons, x), xs)) → APP(f, x)
APP(app(map, f), app(app(cons, x), xs)) → APP(app(map, f), xs)
APP(app(mult, app(s, x)), y) → APP(app(plus, y), app(app(mult, x), y))
APP(app(mult, app(s, x)), y) → APP(plus, y)
APP(app(mult, app(s, x)), y) → APP(app(mult, x), y)
APP(app(mult, app(s, x)), y) → APP(mult, x)
APP(app(plus, app(s, x)), y) → APP(s, app(app(plus, x), y))
APP(app(plus, app(s, x)), y) → APP(app(plus, x), y)
APP(app(plus, app(s, x)), y) → APP(plus, x)
LIST1 → APP(app(map, app(mult, app(s, app(s, 0)))), hamming)
LIST1 → APP(map, app(mult, app(s, app(s, 0))))
LIST1 → APP(mult, app(s, app(s, 0)))
LIST1 → APP(s, app(s, 0))
LIST1 → APP(s, 0)
LIST1 → HAMMING
LIST2 → APP(app(map, app(mult, app(s, app(s, app(s, 0))))), hamming)
LIST2 → APP(map, app(mult, app(s, app(s, app(s, 0)))))
LIST2 → APP(mult, app(s, app(s, app(s, 0))))
LIST2 → APP(s, app(s, app(s, 0)))
LIST2 → APP(s, app(s, 0))
LIST2 → APP(s, 0)
LIST2 → HAMMING
LIST3 → APP(app(map, app(mult, app(s, app(s, app(s, app(s, app(s, 0))))))), hamming)
LIST3 → APP(map, app(mult, app(s, app(s, app(s, app(s, app(s, 0)))))))
LIST3 → APP(mult, app(s, app(s, app(s, app(s, app(s, 0))))))
LIST3 → APP(s, app(s, app(s, app(s, app(s, 0)))))
LIST3 → APP(s, app(s, app(s, app(s, 0))))
LIST3 → APP(s, app(s, app(s, 0)))
LIST3 → APP(s, app(s, 0))
LIST3 → APP(s, 0)
LIST3 → HAMMING
HAMMING → APP(app(cons, app(s, 0)), app(app(merge, list1), app(app(merge, list2), list3)))
HAMMING → APP(cons, app(s, 0))
HAMMING → APP(s, 0)
HAMMING → APP(app(merge, list1), app(app(merge, list2), list3))
HAMMING → APP(merge, list1)
HAMMING → LIST1
HAMMING → APP(app(merge, list2), list3)
HAMMING → APP(merge, list2)
HAMMING → LIST2
HAMMING → LIST3

The TRS R consists of the following rules:

app(app(app(if, true), xs), ys) → xs
app(app(app(if, false), xs), ys) → ys
app(app(lt, app(s, x)), app(s, y)) → app(app(lt, x), y)
app(app(lt, 0), app(s, y)) → true
app(app(lt, y), 0) → false
app(app(eq, x), x) → true
app(app(eq, app(s, x)), 0) → false
app(app(eq, 0), app(s, x)) → false
app(app(merge, xs), nil) → xs
app(app(merge, nil), ys) → ys
app(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → app(app(app(if, app(app(lt, x), y)), app(app(cons, x), app(app(merge, xs), app(app(cons, y), ys)))), app(app(app(if, app(app(eq, x), y)), app(app(cons, x), app(app(merge, xs), ys))), app(app(cons, y), app(app(merge, app(app(cons, x), xs)), ys))))
app(app(map, f), nil) → nil
app(app(map, f), app(app(cons, x), xs)) → app(app(cons, app(f, x)), app(app(map, f), xs))
app(app(mult, 0), x) → 0
app(app(mult, app(s, x)), y) → app(app(plus, y), app(app(mult, x), y))
app(app(plus, 0), x) → 0
app(app(plus, app(s, x)), y) → app(s, app(app(plus, x), y))
list1 → app(app(map, app(mult, app(s, app(s, 0)))), hamming)
list2 → app(app(map, app(mult, app(s, app(s, app(s, 0))))), hamming)
list3 → app(app(map, app(mult, app(s, app(s, app(s, app(s, app(s, 0))))))), hamming)
hamming → app(app(cons, app(s, 0)), app(app(merge, list1), app(app(merge, list2), list3)))

The set Q consists of the following terms:

app(app(app(if, true), x0), x1)
app(app(app(if, false), x0), x1)
app(app(lt, app(s, x0)), app(s, x1))
app(app(lt, 0), app(s, x0))
app(app(lt, x0), 0)
app(app(eq, x0), x0)
app(app(eq, app(s, x0)), 0)
app(app(eq, 0), app(s, x0))
app(app(merge, x0), nil)
app(app(merge, nil), x0)
app(app(merge, app(app(cons, x0), x1)), app(app(cons, x2), x3))
app(app(map, x0), nil)
app(app(map, x0), app(app(cons, x1), x2))
app(app(mult, 0), x0)
app(app(mult, app(s, x0)), x1)
app(app(plus, 0), x0)
app(app(plus, app(s, x0)), x1)
list1
list2
list3
hamming

We have to consider all minimal (P,Q,R)-chains.

(5) DependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 6 SCCs with 48 less nodes.

(6) Complex Obligation (AND)

(7) Obligation:

Q DP problem:
The TRS P consists of the following rules:

APP(app(plus, app(s, x)), y) → APP(app(plus, x), y)

The TRS R consists of the following rules:

app(app(app(if, true), xs), ys) → xs
app(app(app(if, false), xs), ys) → ys
app(app(lt, app(s, x)), app(s, y)) → app(app(lt, x), y)
app(app(lt, 0), app(s, y)) → true
app(app(lt, y), 0) → false
app(app(eq, x), x) → true
app(app(eq, app(s, x)), 0) → false
app(app(eq, 0), app(s, x)) → false
app(app(merge, xs), nil) → xs
app(app(merge, nil), ys) → ys
app(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → app(app(app(if, app(app(lt, x), y)), app(app(cons, x), app(app(merge, xs), app(app(cons, y), ys)))), app(app(app(if, app(app(eq, x), y)), app(app(cons, x), app(app(merge, xs), ys))), app(app(cons, y), app(app(merge, app(app(cons, x), xs)), ys))))
app(app(map, f), nil) → nil
app(app(map, f), app(app(cons, x), xs)) → app(app(cons, app(f, x)), app(app(map, f), xs))
app(app(mult, 0), x) → 0
app(app(mult, app(s, x)), y) → app(app(plus, y), app(app(mult, x), y))
app(app(plus, 0), x) → 0
app(app(plus, app(s, x)), y) → app(s, app(app(plus, x), y))
list1 → app(app(map, app(mult, app(s, app(s, 0)))), hamming)
list2 → app(app(map, app(mult, app(s, app(s, app(s, 0))))), hamming)
list3 → app(app(map, app(mult, app(s, app(s, app(s, app(s, app(s, 0))))))), hamming)
hamming → app(app(cons, app(s, 0)), app(app(merge, list1), app(app(merge, list2), list3)))

The set Q consists of the following terms:

app(app(app(if, true), x0), x1)
app(app(app(if, false), x0), x1)
app(app(lt, app(s, x0)), app(s, x1))
app(app(lt, 0), app(s, x0))
app(app(lt, x0), 0)
app(app(eq, x0), x0)
app(app(eq, app(s, x0)), 0)
app(app(eq, 0), app(s, x0))
app(app(merge, x0), nil)
app(app(merge, nil), x0)
app(app(merge, app(app(cons, x0), x1)), app(app(cons, x2), x3))
app(app(map, x0), nil)
app(app(map, x0), app(app(cons, x1), x2))
app(app(mult, 0), x0)
app(app(mult, app(s, x0)), x1)
app(app(plus, 0), x0)
app(app(plus, app(s, x0)), x1)
list1
list2
list3
hamming

We have to consider all minimal (P,Q,R)-chains.

(8) UsableRulesProof (EQUIVALENT transformation)

As all Q-normal forms are R-normal forms we are in the innermost case. Hence, by the usable rules processor [LPAR04] we can delete all non-usable rules [FROCOS05] from R.

(9) Obligation:

Q DP problem:
The TRS P consists of the following rules:

APP(app(plus, app(s, x)), y) → APP(app(plus, x), y)

R is empty.
The set Q consists of the following terms:

app(app(app(if, true), x0), x1)
app(app(app(if, false), x0), x1)
app(app(lt, app(s, x0)), app(s, x1))
app(app(lt, 0), app(s, x0))
app(app(lt, x0), 0)
app(app(eq, x0), x0)
app(app(eq, app(s, x0)), 0)
app(app(eq, 0), app(s, x0))
app(app(merge, x0), nil)
app(app(merge, nil), x0)
app(app(merge, app(app(cons, x0), x1)), app(app(cons, x2), x3))
app(app(map, x0), nil)
app(app(map, x0), app(app(cons, x1), x2))
app(app(mult, 0), x0)
app(app(mult, app(s, x0)), x1)
app(app(plus, 0), x0)
app(app(plus, app(s, x0)), x1)
list1
list2
list3
hamming

We have to consider all minimal (P,Q,R)-chains.

(10) QReductionProof (EQUIVALENT transformation)

We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN].

list1
list2
list3
hamming

(11) Obligation:

Q DP problem:
The TRS P consists of the following rules:

APP(app(plus, app(s, x)), y) → APP(app(plus, x), y)

R is empty.
The set Q consists of the following terms:

app(app(app(if, true), x0), x1)
app(app(app(if, false), x0), x1)
app(app(lt, app(s, x0)), app(s, x1))
app(app(lt, 0), app(s, x0))
app(app(lt, x0), 0)
app(app(eq, x0), x0)
app(app(eq, app(s, x0)), 0)
app(app(eq, 0), app(s, x0))
app(app(merge, x0), nil)
app(app(merge, nil), x0)
app(app(merge, app(app(cons, x0), x1)), app(app(cons, x2), x3))
app(app(map, x0), nil)
app(app(map, x0), app(app(cons, x1), x2))
app(app(mult, 0), x0)
app(app(mult, app(s, x0)), x1)
app(app(plus, 0), x0)
app(app(plus, app(s, x0)), x1)

We have to consider all minimal (P,Q,R)-chains.

(12) ATransformationProof (EQUIVALENT transformation)

We have applied the A-Transformation [FROCOS05] to get from an applicative problem to a standard problem.

(13) Obligation:

Q DP problem:
The TRS P consists of the following rules:

plus1(s(x), y) → plus1(x, y)

R is empty.
The set Q consists of the following terms:

if(true, x0, x1)
if(false, x0, x1)
lt(s(x0), s(x1))
lt(0, s(x0))
lt(x0, 0)
eq(x0, x0)
eq(s(x0), 0)
eq(0, s(x0))
merge(x0, nil)
merge(nil, x0)
merge(cons(x0, x1), cons(x2, x3))
map(x0, nil)
map(x0, cons(x1, x2))
mult(0, x0)
mult(s(x0), x1)
plus(0, x0)
plus(s(x0), x1)

We have to consider all minimal (P,Q,R)-chains.

(14) QReductionProof (EQUIVALENT transformation)

We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN].

if(true, x0, x1)
if(false, x0, x1)
lt(s(x0), s(x1))
lt(0, s(x0))
lt(x0, 0)
eq(x0, x0)
eq(s(x0), 0)
eq(0, s(x0))
merge(x0, nil)
merge(nil, x0)
merge(cons(x0, x1), cons(x2, x3))
map(x0, nil)
map(x0, cons(x1, x2))
mult(0, x0)
mult(s(x0), x1)
plus(0, x0)
plus(s(x0), x1)

(15) Obligation:

Q DP problem:
The TRS P consists of the following rules:

plus1(s(x), y) → plus1(x, y)

R is empty.
Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(16) QDPSizeChangeProof (EQUIVALENT transformation)

By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem.

From the DPs we obtained the following set of size-change graphs:

  • plus1(s(x), y) → plus1(x, y)
    The graph contains the following edges 1 > 1, 2 >= 2

(17) YES

(18) Obligation:

Q DP problem:
The TRS P consists of the following rules:

APP(app(mult, app(s, x)), y) → APP(app(mult, x), y)

The TRS R consists of the following rules:

app(app(app(if, true), xs), ys) → xs
app(app(app(if, false), xs), ys) → ys
app(app(lt, app(s, x)), app(s, y)) → app(app(lt, x), y)
app(app(lt, 0), app(s, y)) → true
app(app(lt, y), 0) → false
app(app(eq, x), x) → true
app(app(eq, app(s, x)), 0) → false
app(app(eq, 0), app(s, x)) → false
app(app(merge, xs), nil) → xs
app(app(merge, nil), ys) → ys
app(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → app(app(app(if, app(app(lt, x), y)), app(app(cons, x), app(app(merge, xs), app(app(cons, y), ys)))), app(app(app(if, app(app(eq, x), y)), app(app(cons, x), app(app(merge, xs), ys))), app(app(cons, y), app(app(merge, app(app(cons, x), xs)), ys))))
app(app(map, f), nil) → nil
app(app(map, f), app(app(cons, x), xs)) → app(app(cons, app(f, x)), app(app(map, f), xs))
app(app(mult, 0), x) → 0
app(app(mult, app(s, x)), y) → app(app(plus, y), app(app(mult, x), y))
app(app(plus, 0), x) → 0
app(app(plus, app(s, x)), y) → app(s, app(app(plus, x), y))
list1 → app(app(map, app(mult, app(s, app(s, 0)))), hamming)
list2 → app(app(map, app(mult, app(s, app(s, app(s, 0))))), hamming)
list3 → app(app(map, app(mult, app(s, app(s, app(s, app(s, app(s, 0))))))), hamming)
hamming → app(app(cons, app(s, 0)), app(app(merge, list1), app(app(merge, list2), list3)))

The set Q consists of the following terms:

app(app(app(if, true), x0), x1)
app(app(app(if, false), x0), x1)
app(app(lt, app(s, x0)), app(s, x1))
app(app(lt, 0), app(s, x0))
app(app(lt, x0), 0)
app(app(eq, x0), x0)
app(app(eq, app(s, x0)), 0)
app(app(eq, 0), app(s, x0))
app(app(merge, x0), nil)
app(app(merge, nil), x0)
app(app(merge, app(app(cons, x0), x1)), app(app(cons, x2), x3))
app(app(map, x0), nil)
app(app(map, x0), app(app(cons, x1), x2))
app(app(mult, 0), x0)
app(app(mult, app(s, x0)), x1)
app(app(plus, 0), x0)
app(app(plus, app(s, x0)), x1)
list1
list2
list3
hamming

We have to consider all minimal (P,Q,R)-chains.

(19) UsableRulesProof (EQUIVALENT transformation)

As all Q-normal forms are R-normal forms we are in the innermost case. Hence, by the usable rules processor [LPAR04] we can delete all non-usable rules [FROCOS05] from R.

(20) Obligation:

Q DP problem:
The TRS P consists of the following rules:

APP(app(mult, app(s, x)), y) → APP(app(mult, x), y)

R is empty.
The set Q consists of the following terms:

app(app(app(if, true), x0), x1)
app(app(app(if, false), x0), x1)
app(app(lt, app(s, x0)), app(s, x1))
app(app(lt, 0), app(s, x0))
app(app(lt, x0), 0)
app(app(eq, x0), x0)
app(app(eq, app(s, x0)), 0)
app(app(eq, 0), app(s, x0))
app(app(merge, x0), nil)
app(app(merge, nil), x0)
app(app(merge, app(app(cons, x0), x1)), app(app(cons, x2), x3))
app(app(map, x0), nil)
app(app(map, x0), app(app(cons, x1), x2))
app(app(mult, 0), x0)
app(app(mult, app(s, x0)), x1)
app(app(plus, 0), x0)
app(app(plus, app(s, x0)), x1)
list1
list2
list3
hamming

We have to consider all minimal (P,Q,R)-chains.

(21) QReductionProof (EQUIVALENT transformation)

We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN].

list1
list2
list3
hamming

(22) Obligation:

Q DP problem:
The TRS P consists of the following rules:

APP(app(mult, app(s, x)), y) → APP(app(mult, x), y)

R is empty.
The set Q consists of the following terms:

app(app(app(if, true), x0), x1)
app(app(app(if, false), x0), x1)
app(app(lt, app(s, x0)), app(s, x1))
app(app(lt, 0), app(s, x0))
app(app(lt, x0), 0)
app(app(eq, x0), x0)
app(app(eq, app(s, x0)), 0)
app(app(eq, 0), app(s, x0))
app(app(merge, x0), nil)
app(app(merge, nil), x0)
app(app(merge, app(app(cons, x0), x1)), app(app(cons, x2), x3))
app(app(map, x0), nil)
app(app(map, x0), app(app(cons, x1), x2))
app(app(mult, 0), x0)
app(app(mult, app(s, x0)), x1)
app(app(plus, 0), x0)
app(app(plus, app(s, x0)), x1)

We have to consider all minimal (P,Q,R)-chains.

(23) ATransformationProof (EQUIVALENT transformation)

We have applied the A-Transformation [FROCOS05] to get from an applicative problem to a standard problem.

(24) Obligation:

Q DP problem:
The TRS P consists of the following rules:

mult1(s(x), y) → mult1(x, y)

R is empty.
The set Q consists of the following terms:

if(true, x0, x1)
if(false, x0, x1)
lt(s(x0), s(x1))
lt(0, s(x0))
lt(x0, 0)
eq(x0, x0)
eq(s(x0), 0)
eq(0, s(x0))
merge(x0, nil)
merge(nil, x0)
merge(cons(x0, x1), cons(x2, x3))
map(x0, nil)
map(x0, cons(x1, x2))
mult(0, x0)
mult(s(x0), x1)
plus(0, x0)
plus(s(x0), x1)

We have to consider all minimal (P,Q,R)-chains.

(25) QReductionProof (EQUIVALENT transformation)

We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN].

if(true, x0, x1)
if(false, x0, x1)
lt(s(x0), s(x1))
lt(0, s(x0))
lt(x0, 0)
eq(x0, x0)
eq(s(x0), 0)
eq(0, s(x0))
merge(x0, nil)
merge(nil, x0)
merge(cons(x0, x1), cons(x2, x3))
map(x0, nil)
map(x0, cons(x1, x2))
mult(0, x0)
mult(s(x0), x1)
plus(0, x0)
plus(s(x0), x1)

(26) Obligation:

Q DP problem:
The TRS P consists of the following rules:

mult1(s(x), y) → mult1(x, y)

R is empty.
Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(27) QDPSizeChangeProof (EQUIVALENT transformation)

By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem.

From the DPs we obtained the following set of size-change graphs:

  • mult1(s(x), y) → mult1(x, y)
    The graph contains the following edges 1 > 1, 2 >= 2

(28) YES

(29) Obligation:

Q DP problem:
The TRS P consists of the following rules:

APP(app(lt, app(s, x)), app(s, y)) → APP(app(lt, x), y)

The TRS R consists of the following rules:

app(app(app(if, true), xs), ys) → xs
app(app(app(if, false), xs), ys) → ys
app(app(lt, app(s, x)), app(s, y)) → app(app(lt, x), y)
app(app(lt, 0), app(s, y)) → true
app(app(lt, y), 0) → false
app(app(eq, x), x) → true
app(app(eq, app(s, x)), 0) → false
app(app(eq, 0), app(s, x)) → false
app(app(merge, xs), nil) → xs
app(app(merge, nil), ys) → ys
app(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → app(app(app(if, app(app(lt, x), y)), app(app(cons, x), app(app(merge, xs), app(app(cons, y), ys)))), app(app(app(if, app(app(eq, x), y)), app(app(cons, x), app(app(merge, xs), ys))), app(app(cons, y), app(app(merge, app(app(cons, x), xs)), ys))))
app(app(map, f), nil) → nil
app(app(map, f), app(app(cons, x), xs)) → app(app(cons, app(f, x)), app(app(map, f), xs))
app(app(mult, 0), x) → 0
app(app(mult, app(s, x)), y) → app(app(plus, y), app(app(mult, x), y))
app(app(plus, 0), x) → 0
app(app(plus, app(s, x)), y) → app(s, app(app(plus, x), y))
list1 → app(app(map, app(mult, app(s, app(s, 0)))), hamming)
list2 → app(app(map, app(mult, app(s, app(s, app(s, 0))))), hamming)
list3 → app(app(map, app(mult, app(s, app(s, app(s, app(s, app(s, 0))))))), hamming)
hamming → app(app(cons, app(s, 0)), app(app(merge, list1), app(app(merge, list2), list3)))

The set Q consists of the following terms:

app(app(app(if, true), x0), x1)
app(app(app(if, false), x0), x1)
app(app(lt, app(s, x0)), app(s, x1))
app(app(lt, 0), app(s, x0))
app(app(lt, x0), 0)
app(app(eq, x0), x0)
app(app(eq, app(s, x0)), 0)
app(app(eq, 0), app(s, x0))
app(app(merge, x0), nil)
app(app(merge, nil), x0)
app(app(merge, app(app(cons, x0), x1)), app(app(cons, x2), x3))
app(app(map, x0), nil)
app(app(map, x0), app(app(cons, x1), x2))
app(app(mult, 0), x0)
app(app(mult, app(s, x0)), x1)
app(app(plus, 0), x0)
app(app(plus, app(s, x0)), x1)
list1
list2
list3
hamming

We have to consider all minimal (P,Q,R)-chains.

(30) UsableRulesProof (EQUIVALENT transformation)

As all Q-normal forms are R-normal forms we are in the innermost case. Hence, by the usable rules processor [LPAR04] we can delete all non-usable rules [FROCOS05] from R.

(31) Obligation:

Q DP problem:
The TRS P consists of the following rules:

APP(app(lt, app(s, x)), app(s, y)) → APP(app(lt, x), y)

R is empty.
The set Q consists of the following terms:

app(app(app(if, true), x0), x1)
app(app(app(if, false), x0), x1)
app(app(lt, app(s, x0)), app(s, x1))
app(app(lt, 0), app(s, x0))
app(app(lt, x0), 0)
app(app(eq, x0), x0)
app(app(eq, app(s, x0)), 0)
app(app(eq, 0), app(s, x0))
app(app(merge, x0), nil)
app(app(merge, nil), x0)
app(app(merge, app(app(cons, x0), x1)), app(app(cons, x2), x3))
app(app(map, x0), nil)
app(app(map, x0), app(app(cons, x1), x2))
app(app(mult, 0), x0)
app(app(mult, app(s, x0)), x1)
app(app(plus, 0), x0)
app(app(plus, app(s, x0)), x1)
list1
list2
list3
hamming

We have to consider all minimal (P,Q,R)-chains.

(32) QReductionProof (EQUIVALENT transformation)

We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN].

list1
list2
list3
hamming

(33) Obligation:

Q DP problem:
The TRS P consists of the following rules:

APP(app(lt, app(s, x)), app(s, y)) → APP(app(lt, x), y)

R is empty.
The set Q consists of the following terms:

app(app(app(if, true), x0), x1)
app(app(app(if, false), x0), x1)
app(app(lt, app(s, x0)), app(s, x1))
app(app(lt, 0), app(s, x0))
app(app(lt, x0), 0)
app(app(eq, x0), x0)
app(app(eq, app(s, x0)), 0)
app(app(eq, 0), app(s, x0))
app(app(merge, x0), nil)
app(app(merge, nil), x0)
app(app(merge, app(app(cons, x0), x1)), app(app(cons, x2), x3))
app(app(map, x0), nil)
app(app(map, x0), app(app(cons, x1), x2))
app(app(mult, 0), x0)
app(app(mult, app(s, x0)), x1)
app(app(plus, 0), x0)
app(app(plus, app(s, x0)), x1)

We have to consider all minimal (P,Q,R)-chains.

(34) ATransformationProof (EQUIVALENT transformation)

We have applied the A-Transformation [FROCOS05] to get from an applicative problem to a standard problem.

(35) Obligation:

Q DP problem:
The TRS P consists of the following rules:

lt1(s(x), s(y)) → lt1(x, y)

R is empty.
The set Q consists of the following terms:

if(true, x0, x1)
if(false, x0, x1)
lt(s(x0), s(x1))
lt(0, s(x0))
lt(x0, 0)
eq(x0, x0)
eq(s(x0), 0)
eq(0, s(x0))
merge(x0, nil)
merge(nil, x0)
merge(cons(x0, x1), cons(x2, x3))
map(x0, nil)
map(x0, cons(x1, x2))
mult(0, x0)
mult(s(x0), x1)
plus(0, x0)
plus(s(x0), x1)

We have to consider all minimal (P,Q,R)-chains.

(36) QReductionProof (EQUIVALENT transformation)

We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN].

if(true, x0, x1)
if(false, x0, x1)
lt(s(x0), s(x1))
lt(0, s(x0))
lt(x0, 0)
eq(x0, x0)
eq(s(x0), 0)
eq(0, s(x0))
merge(x0, nil)
merge(nil, x0)
merge(cons(x0, x1), cons(x2, x3))
map(x0, nil)
map(x0, cons(x1, x2))
mult(0, x0)
mult(s(x0), x1)
plus(0, x0)
plus(s(x0), x1)

(37) Obligation:

Q DP problem:
The TRS P consists of the following rules:

lt1(s(x), s(y)) → lt1(x, y)

R is empty.
Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(38) QDPSizeChangeProof (EQUIVALENT transformation)

By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem.

From the DPs we obtained the following set of size-change graphs:

  • lt1(s(x), s(y)) → lt1(x, y)
    The graph contains the following edges 1 > 1, 2 > 2

(39) YES

(40) Obligation:

Q DP problem:
The TRS P consists of the following rules:

APP(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → APP(app(merge, xs), ys)
APP(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → APP(app(merge, xs), app(app(cons, y), ys))
APP(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → APP(app(merge, app(app(cons, x), xs)), ys)

The TRS R consists of the following rules:

app(app(app(if, true), xs), ys) → xs
app(app(app(if, false), xs), ys) → ys
app(app(lt, app(s, x)), app(s, y)) → app(app(lt, x), y)
app(app(lt, 0), app(s, y)) → true
app(app(lt, y), 0) → false
app(app(eq, x), x) → true
app(app(eq, app(s, x)), 0) → false
app(app(eq, 0), app(s, x)) → false
app(app(merge, xs), nil) → xs
app(app(merge, nil), ys) → ys
app(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → app(app(app(if, app(app(lt, x), y)), app(app(cons, x), app(app(merge, xs), app(app(cons, y), ys)))), app(app(app(if, app(app(eq, x), y)), app(app(cons, x), app(app(merge, xs), ys))), app(app(cons, y), app(app(merge, app(app(cons, x), xs)), ys))))
app(app(map, f), nil) → nil
app(app(map, f), app(app(cons, x), xs)) → app(app(cons, app(f, x)), app(app(map, f), xs))
app(app(mult, 0), x) → 0
app(app(mult, app(s, x)), y) → app(app(plus, y), app(app(mult, x), y))
app(app(plus, 0), x) → 0
app(app(plus, app(s, x)), y) → app(s, app(app(plus, x), y))
list1 → app(app(map, app(mult, app(s, app(s, 0)))), hamming)
list2 → app(app(map, app(mult, app(s, app(s, app(s, 0))))), hamming)
list3 → app(app(map, app(mult, app(s, app(s, app(s, app(s, app(s, 0))))))), hamming)
hamming → app(app(cons, app(s, 0)), app(app(merge, list1), app(app(merge, list2), list3)))

The set Q consists of the following terms:

app(app(app(if, true), x0), x1)
app(app(app(if, false), x0), x1)
app(app(lt, app(s, x0)), app(s, x1))
app(app(lt, 0), app(s, x0))
app(app(lt, x0), 0)
app(app(eq, x0), x0)
app(app(eq, app(s, x0)), 0)
app(app(eq, 0), app(s, x0))
app(app(merge, x0), nil)
app(app(merge, nil), x0)
app(app(merge, app(app(cons, x0), x1)), app(app(cons, x2), x3))
app(app(map, x0), nil)
app(app(map, x0), app(app(cons, x1), x2))
app(app(mult, 0), x0)
app(app(mult, app(s, x0)), x1)
app(app(plus, 0), x0)
app(app(plus, app(s, x0)), x1)
list1
list2
list3
hamming

We have to consider all minimal (P,Q,R)-chains.

(41) UsableRulesProof (EQUIVALENT transformation)

As all Q-normal forms are R-normal forms we are in the innermost case. Hence, by the usable rules processor [LPAR04] we can delete all non-usable rules [FROCOS05] from R.

(42) Obligation:

Q DP problem:
The TRS P consists of the following rules:

APP(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → APP(app(merge, xs), ys)
APP(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → APP(app(merge, xs), app(app(cons, y), ys))
APP(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → APP(app(merge, app(app(cons, x), xs)), ys)

R is empty.
The set Q consists of the following terms:

app(app(app(if, true), x0), x1)
app(app(app(if, false), x0), x1)
app(app(lt, app(s, x0)), app(s, x1))
app(app(lt, 0), app(s, x0))
app(app(lt, x0), 0)
app(app(eq, x0), x0)
app(app(eq, app(s, x0)), 0)
app(app(eq, 0), app(s, x0))
app(app(merge, x0), nil)
app(app(merge, nil), x0)
app(app(merge, app(app(cons, x0), x1)), app(app(cons, x2), x3))
app(app(map, x0), nil)
app(app(map, x0), app(app(cons, x1), x2))
app(app(mult, 0), x0)
app(app(mult, app(s, x0)), x1)
app(app(plus, 0), x0)
app(app(plus, app(s, x0)), x1)
list1
list2
list3
hamming

We have to consider all minimal (P,Q,R)-chains.

(43) QReductionProof (EQUIVALENT transformation)

We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN].

list1
list2
list3
hamming

(44) Obligation:

Q DP problem:
The TRS P consists of the following rules:

APP(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → APP(app(merge, xs), ys)
APP(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → APP(app(merge, xs), app(app(cons, y), ys))
APP(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → APP(app(merge, app(app(cons, x), xs)), ys)

R is empty.
The set Q consists of the following terms:

app(app(app(if, true), x0), x1)
app(app(app(if, false), x0), x1)
app(app(lt, app(s, x0)), app(s, x1))
app(app(lt, 0), app(s, x0))
app(app(lt, x0), 0)
app(app(eq, x0), x0)
app(app(eq, app(s, x0)), 0)
app(app(eq, 0), app(s, x0))
app(app(merge, x0), nil)
app(app(merge, nil), x0)
app(app(merge, app(app(cons, x0), x1)), app(app(cons, x2), x3))
app(app(map, x0), nil)
app(app(map, x0), app(app(cons, x1), x2))
app(app(mult, 0), x0)
app(app(mult, app(s, x0)), x1)
app(app(plus, 0), x0)
app(app(plus, app(s, x0)), x1)

We have to consider all minimal (P,Q,R)-chains.

(45) ATransformationProof (EQUIVALENT transformation)

We have applied the A-Transformation [FROCOS05] to get from an applicative problem to a standard problem.

(46) Obligation:

Q DP problem:
The TRS P consists of the following rules:

merge1(cons(x, xs), cons(y, ys)) → merge1(xs, ys)
merge1(cons(x, xs), cons(y, ys)) → merge1(xs, cons(y, ys))
merge1(cons(x, xs), cons(y, ys)) → merge1(cons(x, xs), ys)

R is empty.
The set Q consists of the following terms:

if(true, x0, x1)
if(false, x0, x1)
lt(s(x0), s(x1))
lt(0, s(x0))
lt(x0, 0)
eq(x0, x0)
eq(s(x0), 0)
eq(0, s(x0))
merge(x0, nil)
merge(nil, x0)
merge(cons(x0, x1), cons(x2, x3))
map(x0, nil)
map(x0, cons(x1, x2))
mult(0, x0)
mult(s(x0), x1)
plus(0, x0)
plus(s(x0), x1)

We have to consider all minimal (P,Q,R)-chains.

(47) QReductionProof (EQUIVALENT transformation)

We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN].

if(true, x0, x1)
if(false, x0, x1)
lt(s(x0), s(x1))
lt(0, s(x0))
lt(x0, 0)
eq(x0, x0)
eq(s(x0), 0)
eq(0, s(x0))
merge(x0, nil)
merge(nil, x0)
merge(cons(x0, x1), cons(x2, x3))
map(x0, nil)
map(x0, cons(x1, x2))
mult(0, x0)
mult(s(x0), x1)
plus(0, x0)
plus(s(x0), x1)

(48) Obligation:

Q DP problem:
The TRS P consists of the following rules:

merge1(cons(x, xs), cons(y, ys)) → merge1(xs, ys)
merge1(cons(x, xs), cons(y, ys)) → merge1(xs, cons(y, ys))
merge1(cons(x, xs), cons(y, ys)) → merge1(cons(x, xs), ys)

R is empty.
Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(49) QDPSizeChangeProof (EQUIVALENT transformation)

By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem.

From the DPs we obtained the following set of size-change graphs:

  • merge1(cons(x, xs), cons(y, ys)) → merge1(xs, ys)
    The graph contains the following edges 1 > 1, 2 > 2

  • merge1(cons(x, xs), cons(y, ys)) → merge1(xs, cons(y, ys))
    The graph contains the following edges 1 > 1, 2 >= 2

  • merge1(cons(x, xs), cons(y, ys)) → merge1(cons(x, xs), ys)
    The graph contains the following edges 1 >= 1, 2 > 2

(50) YES

(51) Obligation:

Q DP problem:
The TRS P consists of the following rules:

APP(app(map, f), app(app(cons, x), xs)) → APP(app(map, f), xs)
APP(app(map, f), app(app(cons, x), xs)) → APP(f, x)

The TRS R consists of the following rules:

app(app(app(if, true), xs), ys) → xs
app(app(app(if, false), xs), ys) → ys
app(app(lt, app(s, x)), app(s, y)) → app(app(lt, x), y)
app(app(lt, 0), app(s, y)) → true
app(app(lt, y), 0) → false
app(app(eq, x), x) → true
app(app(eq, app(s, x)), 0) → false
app(app(eq, 0), app(s, x)) → false
app(app(merge, xs), nil) → xs
app(app(merge, nil), ys) → ys
app(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → app(app(app(if, app(app(lt, x), y)), app(app(cons, x), app(app(merge, xs), app(app(cons, y), ys)))), app(app(app(if, app(app(eq, x), y)), app(app(cons, x), app(app(merge, xs), ys))), app(app(cons, y), app(app(merge, app(app(cons, x), xs)), ys))))
app(app(map, f), nil) → nil
app(app(map, f), app(app(cons, x), xs)) → app(app(cons, app(f, x)), app(app(map, f), xs))
app(app(mult, 0), x) → 0
app(app(mult, app(s, x)), y) → app(app(plus, y), app(app(mult, x), y))
app(app(plus, 0), x) → 0
app(app(plus, app(s, x)), y) → app(s, app(app(plus, x), y))
list1 → app(app(map, app(mult, app(s, app(s, 0)))), hamming)
list2 → app(app(map, app(mult, app(s, app(s, app(s, 0))))), hamming)
list3 → app(app(map, app(mult, app(s, app(s, app(s, app(s, app(s, 0))))))), hamming)
hamming → app(app(cons, app(s, 0)), app(app(merge, list1), app(app(merge, list2), list3)))

The set Q consists of the following terms:

app(app(app(if, true), x0), x1)
app(app(app(if, false), x0), x1)
app(app(lt, app(s, x0)), app(s, x1))
app(app(lt, 0), app(s, x0))
app(app(lt, x0), 0)
app(app(eq, x0), x0)
app(app(eq, app(s, x0)), 0)
app(app(eq, 0), app(s, x0))
app(app(merge, x0), nil)
app(app(merge, nil), x0)
app(app(merge, app(app(cons, x0), x1)), app(app(cons, x2), x3))
app(app(map, x0), nil)
app(app(map, x0), app(app(cons, x1), x2))
app(app(mult, 0), x0)
app(app(mult, app(s, x0)), x1)
app(app(plus, 0), x0)
app(app(plus, app(s, x0)), x1)
list1
list2
list3
hamming

We have to consider all minimal (P,Q,R)-chains.

(52) UsableRulesProof (EQUIVALENT transformation)

As all Q-normal forms are R-normal forms we are in the innermost case. Hence, by the usable rules processor [LPAR04] we can delete all non-usable rules [FROCOS05] from R.

(53) Obligation:

Q DP problem:
The TRS P consists of the following rules:

APP(app(map, f), app(app(cons, x), xs)) → APP(app(map, f), xs)
APP(app(map, f), app(app(cons, x), xs)) → APP(f, x)

R is empty.
The set Q consists of the following terms:

app(app(app(if, true), x0), x1)
app(app(app(if, false), x0), x1)
app(app(lt, app(s, x0)), app(s, x1))
app(app(lt, 0), app(s, x0))
app(app(lt, x0), 0)
app(app(eq, x0), x0)
app(app(eq, app(s, x0)), 0)
app(app(eq, 0), app(s, x0))
app(app(merge, x0), nil)
app(app(merge, nil), x0)
app(app(merge, app(app(cons, x0), x1)), app(app(cons, x2), x3))
app(app(map, x0), nil)
app(app(map, x0), app(app(cons, x1), x2))
app(app(mult, 0), x0)
app(app(mult, app(s, x0)), x1)
app(app(plus, 0), x0)
app(app(plus, app(s, x0)), x1)
list1
list2
list3
hamming

We have to consider all minimal (P,Q,R)-chains.

(54) QReductionProof (EQUIVALENT transformation)

We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN].

list1
list2
list3
hamming

(55) Obligation:

Q DP problem:
The TRS P consists of the following rules:

APP(app(map, f), app(app(cons, x), xs)) → APP(app(map, f), xs)
APP(app(map, f), app(app(cons, x), xs)) → APP(f, x)

R is empty.
The set Q consists of the following terms:

app(app(app(if, true), x0), x1)
app(app(app(if, false), x0), x1)
app(app(lt, app(s, x0)), app(s, x1))
app(app(lt, 0), app(s, x0))
app(app(lt, x0), 0)
app(app(eq, x0), x0)
app(app(eq, app(s, x0)), 0)
app(app(eq, 0), app(s, x0))
app(app(merge, x0), nil)
app(app(merge, nil), x0)
app(app(merge, app(app(cons, x0), x1)), app(app(cons, x2), x3))
app(app(map, x0), nil)
app(app(map, x0), app(app(cons, x1), x2))
app(app(mult, 0), x0)
app(app(mult, app(s, x0)), x1)
app(app(plus, 0), x0)
app(app(plus, app(s, x0)), x1)

We have to consider all minimal (P,Q,R)-chains.

(56) QDPSizeChangeProof (EQUIVALENT transformation)

By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem.

From the DPs we obtained the following set of size-change graphs:

  • APP(app(map, f), app(app(cons, x), xs)) → APP(app(map, f), xs)
    The graph contains the following edges 1 >= 1, 2 > 2

  • APP(app(map, f), app(app(cons, x), xs)) → APP(f, x)
    The graph contains the following edges 1 > 1, 2 > 2

(57) YES

(58) Obligation:

Q DP problem:
The TRS P consists of the following rules:

LIST1 → HAMMING
HAMMING → LIST1
HAMMING → LIST2
LIST2 → HAMMING
HAMMING → LIST3
LIST3 → HAMMING

The TRS R consists of the following rules:

app(app(app(if, true), xs), ys) → xs
app(app(app(if, false), xs), ys) → ys
app(app(lt, app(s, x)), app(s, y)) → app(app(lt, x), y)
app(app(lt, 0), app(s, y)) → true
app(app(lt, y), 0) → false
app(app(eq, x), x) → true
app(app(eq, app(s, x)), 0) → false
app(app(eq, 0), app(s, x)) → false
app(app(merge, xs), nil) → xs
app(app(merge, nil), ys) → ys
app(app(merge, app(app(cons, x), xs)), app(app(cons, y), ys)) → app(app(app(if, app(app(lt, x), y)), app(app(cons, x), app(app(merge, xs), app(app(cons, y), ys)))), app(app(app(if, app(app(eq, x), y)), app(app(cons, x), app(app(merge, xs), ys))), app(app(cons, y), app(app(merge, app(app(cons, x), xs)), ys))))
app(app(map, f), nil) → nil
app(app(map, f), app(app(cons, x), xs)) → app(app(cons, app(f, x)), app(app(map, f), xs))
app(app(mult, 0), x) → 0
app(app(mult, app(s, x)), y) → app(app(plus, y), app(app(mult, x), y))
app(app(plus, 0), x) → 0
app(app(plus, app(s, x)), y) → app(s, app(app(plus, x), y))
list1 → app(app(map, app(mult, app(s, app(s, 0)))), hamming)
list2 → app(app(map, app(mult, app(s, app(s, app(s, 0))))), hamming)
list3 → app(app(map, app(mult, app(s, app(s, app(s, app(s, app(s, 0))))))), hamming)
hamming → app(app(cons, app(s, 0)), app(app(merge, list1), app(app(merge, list2), list3)))

The set Q consists of the following terms:

app(app(app(if, true), x0), x1)
app(app(app(if, false), x0), x1)
app(app(lt, app(s, x0)), app(s, x1))
app(app(lt, 0), app(s, x0))
app(app(lt, x0), 0)
app(app(eq, x0), x0)
app(app(eq, app(s, x0)), 0)
app(app(eq, 0), app(s, x0))
app(app(merge, x0), nil)
app(app(merge, nil), x0)
app(app(merge, app(app(cons, x0), x1)), app(app(cons, x2), x3))
app(app(map, x0), nil)
app(app(map, x0), app(app(cons, x1), x2))
app(app(mult, 0), x0)
app(app(mult, app(s, x0)), x1)
app(app(plus, 0), x0)
app(app(plus, app(s, x0)), x1)
list1
list2
list3
hamming

We have to consider all minimal (P,Q,R)-chains.

(59) UsableRulesProof (EQUIVALENT transformation)

As all Q-normal forms are R-normal forms we are in the innermost case. Hence, by the usable rules processor [LPAR04] we can delete all non-usable rules [FROCOS05] from R.

(60) Obligation:

Q DP problem:
The TRS P consists of the following rules:

LIST1 → HAMMING
HAMMING → LIST1
HAMMING → LIST2
LIST2 → HAMMING
HAMMING → LIST3
LIST3 → HAMMING

R is empty.
The set Q consists of the following terms:

app(app(app(if, true), x0), x1)
app(app(app(if, false), x0), x1)
app(app(lt, app(s, x0)), app(s, x1))
app(app(lt, 0), app(s, x0))
app(app(lt, x0), 0)
app(app(eq, x0), x0)
app(app(eq, app(s, x0)), 0)
app(app(eq, 0), app(s, x0))
app(app(merge, x0), nil)
app(app(merge, nil), x0)
app(app(merge, app(app(cons, x0), x1)), app(app(cons, x2), x3))
app(app(map, x0), nil)
app(app(map, x0), app(app(cons, x1), x2))
app(app(mult, 0), x0)
app(app(mult, app(s, x0)), x1)
app(app(plus, 0), x0)
app(app(plus, app(s, x0)), x1)
list1
list2
list3
hamming

We have to consider all minimal (P,Q,R)-chains.

(61) QReductionProof (EQUIVALENT transformation)

We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN].

app(app(app(if, true), x0), x1)
app(app(app(if, false), x0), x1)
app(app(lt, app(s, x0)), app(s, x1))
app(app(lt, 0), app(s, x0))
app(app(lt, x0), 0)
app(app(eq, x0), x0)
app(app(eq, app(s, x0)), 0)
app(app(eq, 0), app(s, x0))
app(app(merge, x0), nil)
app(app(merge, nil), x0)
app(app(merge, app(app(cons, x0), x1)), app(app(cons, x2), x3))
app(app(map, x0), nil)
app(app(map, x0), app(app(cons, x1), x2))
app(app(mult, 0), x0)
app(app(mult, app(s, x0)), x1)
app(app(plus, 0), x0)
app(app(plus, app(s, x0)), x1)
list1
list2
list3
hamming

(62) Obligation:

Q DP problem:
The TRS P consists of the following rules:

LIST1 → HAMMING
HAMMING → LIST1
HAMMING → LIST2
LIST2 → HAMMING
HAMMING → LIST3
LIST3 → HAMMING

R is empty.
Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(63) NonTerminationProof (EQUIVALENT transformation)

We used the non-termination processor [FROCOS05] to show that the DP problem is infinite.
Found a loop by narrowing to the left:

s = HAMMING evaluates to t =HAMMING

Thus s starts an infinite chain as s semiunifies with t with the following substitutions:
  • Matcher: [ ]
  • Semiunifier: [ ]




Rewriting sequence

HAMMING → LIST1
with rule HAMMING → LIST1 at position [] and matcher [ ]

LIST1 → HAMMING
with rule LIST1 → HAMMING

Now applying the matcher to the start term leads to a term which is equal to the last term in the rewriting sequence


All these steps are and every following step will be a correct step w.r.t to Q.



(64) NO